// 单件设计模式[懒汉(等到需要使用对象的时候才创建对象,按需加载)单件设计模式]
/**
 * 1. 把构造器设置为私有的,不允许外部来创建类的实例[对象]
 * 2. 至少应该提供一个外部访问的方法或属性,外部可以通过这个方法或属性来得到一个对象
 *    所以应该吧这个方法设置为静态方法
 * 3. 外部调用第二步提供的静态方法来获取一个对象
 *
 */
export default class MyLocalStorage {
  // 静态引用类型
  static localstorage: MyLocalStorage; // 感叹号! localstorage!: MyLocalStorage  代表可以兼容undefined类型
  static count: number = 3; // 静态基本类型
  // ! 使用static 静态方法 不需要创建实例来调用
  public static getInstance() {
    // 不能使用 return new MyLocalStorage()
    // ! 静态方法不可以访问实例属性或者实例方法

    if (!this.localstorage) {
      console.log('sss懒汉')
      this.localstorage = new MyLocalStorage();
      // this.localstorage.getItem()
    }
  }

  // 保存key-value
  public setItem(key: string, value: any) {
    localStorage.setItem(key, JSON.stringify(value));
  }

  public getItem(key: string) {
    let value = localStorage.getItem(key);
    return value ? JSON.parse(value) : null;
  }
}

MyLocalStorage.getInstance()